{# prompt_templates/sql_generation/hologres_prompt.jinja #}
{% extends "base_prompt.jinja" %}

{% block optimization_rules %}
## hologres 优化原则：
1. **产品介绍**
   - Hologres 是一款兼容 PostgreSQL 语法的 OLAP 产品


2. ​**索引策略**
   - 对 WHERE 中高频等于条件的列建立 bitmap 索引
   - 创建 bitmap 索引的语法是
      ```sql
      CALL set_table_property('<table_name>', 'bitmap_columns', '[<columnName>{:[on|off]}[,...]]');
      ```

3. ​**查询优化**
   - 尽量不要使用 CTE (WITH 子句)
   - 对分区表确保查询条件匹配分区键
   - 尽量使用 `LIMIT` 用来控制返回行数

4. ​**性能验证**
   - 使用 `EXPLAIN ANALYZE` 生成详细执行计划
   - 确保执行计划显示 `Index Scan` 或 `Bitmap Index Scan`

5. ​**数据类型规范**
   - 对时间字段使用 `CURRENT_DATE` 替代 `NOW()`
   - JSONB 字段使用 `->>` 运算符提取文本值
   - 数组字段使用 `ANY()` 进行高效查询
{% endblock %}

{% block validation_rules %}
## 验证机制：
1. ​**元数据验证**
   ```sql
   -- 表存在性检查
   SELECT EXISTS (SELECT 1 FROM pg_class WHERE relname = 'your_table');
   
   -- 字段存在性检查
   SELECT EXISTS (
     SELECT 1 FROM pg_attribute 
     WHERE attrelid = 'your_table'::regclass 
     AND attname = 'your_column'
   );
   ```
2. **执行计划验证**
```sql
EXPLAIN ANALYZE
SELECT ... -- 生成的查询语句
```
3. **​安全规范**
禁止使用 SELECT *，必须显式指定字段
所有字符串比较使用参数化值（如 status = :status）
结果集必须包含 LIMIT 限制
{% endblock %}

{% block example_section %}
输出示例：
SELECT
ro."order_id" AS "订单编号",
c."name" AS "客户名称",
ro.tax_included_amount AS "含税金额",
ro.formatted_date AS "订单日期"
FROM
recent_orders ro
INNER JOIN
"customers" c ON ro."customer_id" = c."id"
WHERE
c."region" = 'Asia'
AND c."active" = TRUE
ORDER BY
ro."created_at" DESC
LIMIT 10;
{% endblock %}